/**
 * 添加子进程
 */
const cp = require('child_process')
// 拼接路径
const { resolve } = require('path')
//让爬虫数据存入mongodb 一开始拿不到movie 要放入启动文件后才能拿到
const mongoose = require('mongoose');
const Movie = mongoose.model('Movie');

// 自动执行的方法 可以使用await关键字
;(async () => {
  //连接爬虫脚本
  const script = resolve(__dirname, '../crawler/trailer-list')
//   声明一个fork（路径，空数组） 派发一个子进程
  const child = cp.fork(script, [])
//   表示脚本是否有运行
  let invoked = false
//   监听子进程是否异常  子进程继承了event
  child.on('error', err => {
    if (invoked) return

    invoked = true

    console.log(err)
  })
//   监听是否退出
  child.on('exit', code => {
    if (invoked) return

    invoked = true
    let err = code === 0 ? null : new Error('exit code ' + code)

    console.log(err)
  })
//   事件监听
  child.on('message', data => {
    let result = data.result
    console.log(result)
    result.forEach(async item => {
       let movie = await Movie.findOne({
          doubanId:item.doubanId
       })
      //  如果存过就不存了
      if(!movie){
        movie = new Movie(item)
        await movie.save();
      }

    });
  })
})()
